#pragma once
#include "array/Array.hpp"
#include "util/Convert.h"
#include "lang/StringBuilder.h"

namespace yzrilyzr_util{
	EBCLASS(ByteUtil){
	public:
	static yzrilyzr_lang::String byte2Hex(const yzrilyzr_array::ByteArray & by){
		if(by == nullptr) return nullptr;
		yzrilyzr_lang::StringBuilder sb;
		for(int8_t i:by){
			int j=i & 0xff;
			yzrilyzr_lang::String s=toHexString(j);
			if(s.length() == 1) sb.append("0");
			sb.append(s);
		}
		return sb.toString();
	}

	static yzrilyzr_array::ByteArray hex2Byte(const yzrilyzr_lang::String &s){
		if(s.length() % 2 == 1) throw yzrilyzr_lang::IndexOutOfBoundsException("s.length() % 2 != 0");
		yzrilyzr_array::ByteArray by(s.length() / 2);
		for(u_index i=0;i < by.length;i++){
			int32_t j=parseInt(s.substring(i * 2, i * 2 + 2), 16);
			by[i]=(int8_t)j;
		}
		return by;
	}
	};
}